/*
 * Copyright (c) 2021，上海福宇龙汽车科技有限公司
 * All rights reserved.
 * 文件名称: uart7_lcd.h
 * 摘要:
 * 当前版本: V1.0.0 周伟
 * Date: 2024-03-27
 * 历史版本: Vx.x.x，编写者/修改者，修改时间，修改内容（重大发布时，总结重点变更内容）
 */
#ifndef _UART7_LCD_H
#define _UART7_LCD_H
#include <stdint.h>
#include <stdbool.h>
/*帧头,固定为“0x55”*/
#define LCD_HEAD (0x55)

/*帧长度,固定为10*/
#define LCD_FRAME_LEN (0x0A)

/*保留字节*/
#define LCD_RESERVE (0x00)

/*帧尾*/
#define LCD_FRAME_END (0xFF)

typedef enum
{
    STATUS_QUALIFIED = 0x00,  /*合格*/
    STATUS_UNQUALIFIED = 0x01 /*不合格*/
} Byte0Status;

/**
 * 定义枚举类型，测试产品号
 */
typedef enum
{
    EHBL_TEST,            /* EHBL测试 */
    NFC_READER_TEST,      /* NFC读卡器测试 */
    NFC_CONTROLLER_TEST,  /* NFC控制器测试 */
    NFC_CARD_READER_TEST, /* NFC读卡器卡片测试 */
    MAIN_INTERFACE,       /* 主界面 */
    EHBL_LOOP_TEST        /* EHBL循环测试 */
} NFCTestStatus;

/**
 * 定义枚举类型数据类型，用于表示各种测试状态和切换界面
 */
typedef enum
{
    WORKSTATION_VOLTAGE,    /* 工装电压值 */
    WORKSTATION_SELF_CHECK, /* 工装自检状态 */
    POWER_SHORT_CIRCUIT,    /* 电源短路状态 */
    CAN_COMMUNICATION,      /* CAN通信状态 */
    LCD_HARDWARE_VERSION,   /* 硬件版本号 */
    LCD_SOFTWARE_VERSION,   /* 软件版本号 */
    CARD_SWIPE_TEST,        /* 刷卡测试状态 */
    LOW_POWER_STATE,        /* 低功耗状态 */
    SERIAL_COMMUNICATION,   /* 串口通信状态 */
    EHBL_OUTPUT_DISABLE,    /* 禁止EHBL输出状态 */
    PRODUCT_OUTPUT_TEST,    /* 产品输出检测状态 */
    PRODUCT_INPUT_TEST,     /* 产品输入检测状态 */
    LOCK_TEST_STATE,        /* 闭锁测试状态 */
    UNLOCK_TEST_STATE,      /* 解锁测试状态 */
    LOCK_DISABLE_STATE,     /* 禁止上锁状态 */
    LOCK_EHBL_QUIT_EOL,     /*使EHBL退出EOL模式*/
    HARDWARE_VERSION_NUMBER_CORRECT,          /*硬件版本号是否正确*/
    SOFTWARE_VERSION_NUMBER_CORRECT,          /*软件版本号是否正确*/
    LOOP_INIT_UNLOCK,       /*循环测试初始化为解锁状态*/
    LOOP_NUMBER,            /*EHBL循环次数*/
    LOCK_FRONT_STATE,       /*锁前置状态*/
    LOCK_CURRENT_STATE,     /*锁当前状态*/
    LOOP_SUCCESS_OR_FAILURE,/*锁循环成功结束与否*/
    REASON_FOR_LOOP_FAILURE,/*循环测试失败原因*/
    CURRENT_MAGNITUDE,      /*电流值*/
    SWIPE_BUTTON_NUM,       /*刷卡按键次数*/
    SWIPE_NUM,              /*刷卡次数*/
    SWIPE_ACTION_STATE,     /*刷卡动作状态*/
    REQUIRE_SWIPE_NUM,      /*规定刷卡次数*/
    SUCC_ITEMS_ADD,         /*成功件++*/
    FAIL_ITEMS_ADD,         /*失败件++*/
    EHBL_BREAKING,          /* EHBL磨合状态 */
    TEST_RESULT = 0xFE,     /* 测试结果 */
    INTERFACE_SWITCH        /* 界面切换 */
} LCD_TestStatus;

typedef union
{
    struct
    {
        uint16_t voltage_integer; /* 电压整数部分  */
        uint16_t voltage_decimal; /* 电压小数部分 */
    } vol;

    uint32_t status; /* 状态，0x00为合格，0x01为不合格*/

    uint32_t software_version; /* 软件版本号，假设是32位无符号整数  */

    uint32_t hardware_version; /* 硬件版本号，假设是32位无符号整数 */

    uint32_t data;
} Lcd_data;

typedef union
{
    struct
    {
        uint8_t frame_header;        /* 帧头  */
        uint8_t frame_length;        /* 帧长度  */
        uint8_t test_product_number; /* 测试产品号  */
        uint8_t data_type;           /* 数据类型  */
        Lcd_data l_data;             /*数据（4字节）  */
        uint8_t reserved;            /* 保留字段  */
        uint8_t frame_tail;          /* 帧尾  */
    } sig;
    uint8_t F_data[LCD_FRAME_LEN];
} LCDFramePacket;

/*
 * 函数介绍: LCD串口通讯协议初始化
 * 参数:
 * 返回值: {*}
 * 备注:
 */
void LCD_init(void);

/*
 * 函数介绍: LCD串口协议发送
 * 参数:
 * 返回值: {*}
 * 备注:
 */
void LCD_transmit(NFCTestStatus test_product_number, LCD_TestStatus data_type, uint32_t data);

/*
 * 函数介绍: 工装自检显示主界面
 * 参数:
 * 返回值: {*}
 * 备注:
 * 检测系统工作电压是否正常
 * 合格自检灯亮绿灯
 * 不合格亮红灯，并且蜂鸣3声
 */
void frock_self_checking_LCD(NFCTestStatus St,bool frock_check_result);

#endif
